package com.zy.je.common.core.model;

import com.zy.je.common.core.constant.QueryType;
import com.zy.je.common.core.constant.StringPool;
import com.zy.je.common.core.utils.reflection.Fn;
import com.zy.je.common.core.utils.reflection.Reflection;

import java.util.Map;

/**
 * 查询条件增强对象
 *
 * @author zy
 */
public interface QueryMap {
//    /**
//     * 查询条件增强
//     */
//    @ApiModelProperty(value = "查询条件增强")
//    protected Map<String, String> _q;


    Map<String, String> buildQ();

    default <T> QueryMap addQueryCondition(Fn<T, ?> fn, QueryType queryType, String value) {
        String key = Reflection.fnToFieldName(fn) + StringPool.UNDERSCORE + queryType.getValue();
        this.addQueryCondition(key, value);
        return this;
    }

    default <T> QueryMap addQueryCondition(String key, String value) {
        this.buildQ().put(key, value);
        return this;
    }

    default String getMapQueryValue(String key) {
        return buildQ().get(key);
    }

    default <V> V getMapQueryValue(String key, Class<V> cls) {
        Object v = buildQ().get(key);
        if (null != v) {
            if (v.getClass().equals(cls)) {
                return (V) v;
            } else {
                return null;
            }
        }
        return null;
    }
}
